package cn.com.dcsgo.service;

import cn.com.dcsgo.domain.dto.SysMenuSaveDTO;
import cn.com.dcsgo.domain.dto.SysMenuUpdateDTO;
import cn.com.dcsgo.domain.po.SysMenu;
import cn.com.dcsgo.domain.vo.RouterVO;
import cn.com.dcsgo.domain.vo.SysMenuVO;

import java.util.List;

/**
 * SysMenuService
 *
 * @author Dcsgo
 * @since 28/5/2025 上午 8:34
 */

public interface SysMenuService extends SysBaseService<SysMenu> {
    /**
     * 获取用户拥有其权限的所有菜单
     *
     * @return 层级关系的菜单列表
     */
    List<SysMenuVO> list();

    /**
     * 添加菜单
     *
     * @param saveDTO 菜单信息
     * @return 受影响的行数
     */
    int save(SysMenuSaveDTO saveDTO);

    /**
     * 根据菜单id获取菜单信息
     *
     * @param menuId 菜单id
     * @return 菜单信息
     */
    SysMenu get(Long menuId);

    /**
     * 仅获取所有用户拥有其权限的目录和菜单，返回的是层级结构的菜单列表
     *
     * @return 层级结构的菜单列表
     */
    List<SysMenuVO> directoryAndMenuList();

    /**
     * 修改菜单
     *
     * @param updateDTO 新的菜单信息
     * @return 受影响的行数
     */
    int update(SysMenuUpdateDTO updateDTO);

    /**
     * 根据菜单编号删除菜单，只允许删除没有子元素的菜单
     *
     * @param menuId 菜单编号
     * @return 受影响的行数
     */
    int remove(Long menuId);

    /**
     * 获取动态路由
     *
     * @return 所有菜单，不包含按钮
     */
    List<RouterVO> getRouters();
}
